package com.hsjk.szwj.module.train.service;

import com.hsjk.szwj.framework.common.pojo.PageResult;
import com.hsjk.szwj.module.train.controller.admin.dto.QuestionInitDTO;
import com.hsjk.szwj.module.train.controller.app.vo.chapter.AppMemberErrorQuestionChapterRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberActionRecordReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberCollectIdsReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberErrorIdsReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperListReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperRecordPageReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperRecordPageRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperRecordReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperRecordRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperSummaryReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperSummaryRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionActionRecordReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionChapterListRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionListRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionPageRespVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionSetPageReqVO;
import com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionTagPageReqVO;
import com.hsjk.szwj.module.train.dal.dataobject.question.MemberPaperErrorRecordDO;

import java.util.List;

/**
 * @author chenjiawei
 * @desc
 * @Date 2023/08/19 00:35
 **/
public interface IQuestionService {
    void questionInit(List<QuestionInitDTO> dtoList);

    /**
     * 初始化标准考卷
     *
     * @author chenjiawei
     * @date 2023/8/19 8:55 下午
     **/
    void initStandardPaper();

    /**
     * 初始化个性化考卷
     *
     * @param memberId
     * @param carType
     * @param subject
     * @author chenjiawei
     * @date 2023/8/20 5:46 下午
     **/
    void initPersonalPaper(Long memberId, Integer carType, Integer subject);

    /**
     * 生成用户个性化考卷-小车科目一
     *
     * @author chenjiawei
     * @date 2023/8/20 3:17 下午
     **/
    void initPersonalPaperForCarAndSubject1(Long memberId);

    /**
     * 生成标准考卷-小车科目一
     *
     * @param batchNum
     * @author chenjiawei
     * @date 2023/8/19 10:56 下午
     **/
    void initStandardPaperForCarAndSubject1(Integer batchNum);

    /**
     * 生成标准考卷-摩托科目一
     *
     * @param batchNum
     * @author chenjiawei
     * @date 2023/8/19 9:25 下午
     **/
    void initStandardPaperForMotoAndSubject1(Integer batchNum);

    /**
     * 生成用户个性化考卷-摩托科目一
     *
     * @author chenjiawei
     * @date 2023/8/20 3:17 下午
     **/
    void initPersonalPaperForMotoAndSubject1(Long memberId);


    /**
     * 生成标准考卷-小车科目四
     *
     * @param batchNum
     * @author chenjiawei
     * @date 2023/8/19 9:25 下午
     **/
    void initStandardPaperForCarAndSubject4(Integer batchNum);

    /**
     * 生成用户个性化考卷-小车科目四
     *
     * @author chenjiawei
     * @date 2023/8/20 3:17 下午
     **/
    void initPersonalPaperForCarAndSubject4(Long memberId);

    /**
     * 生成标准考卷-摩托科目四
     *
     * @param batchNum
     * @author chenjiawei
     * @date 2023/8/19 9:25 下午
     **/
    void initStandardPaperForMotoAndSubject4(Integer batchNum);


    /**
     * 生成用户个性化考卷-摩托科目四
     *
     * @author chenjiawei
     * @date 2023/8/20 3:17 下午
     **/
    void initPersonalPaperForMotoAndSubject4(Long memberId);

    /**
     * 根据题集id分页查询题目列表
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionPageRespVO>
     * @author chenjiawei
     * @date 2023/8/31 12:11 上午
     **/
    PageResult<AppQuestionPageRespVO> getQuestionBySetIdPage(AppQuestionSetPageReqVO reqVO);

    /**
     * 根据题集id查询题目id列表
     *
     * @param questionSetId
     * @return java.util.List<java.lang.Long>
     * @author chenjiawei
     * @date 2023/8/31 3:24 下午
     **/
    List<Long> getQuestionIdListBySetId(Long questionSetId);

    /**
     * 根据题目标签id分页查询题目列表
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionPageRespVO>
     * @author chenjiawei
     * @date 2023/8/31 1:34 上午
     **/
    PageResult<AppQuestionPageRespVO> getQuestionByTagIdPage(AppQuestionTagPageReqVO reqVO);

    /**
     * 根据题目标签id分页查询题目id列表
     *
     * @param questionTagId
     * @return java.util.List<java.lang.Long>
     * @author chenjiawei
     * @date 2023/8/31 3:25 下午
     **/
    List<Long> getQuestionIdListByTagId(Long questionTagId);

    /**
     * 根据题库IDS获取题库数据
     *
     * @param ids
     * @return java.util.List<com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionListRespVO>
     * @author chenjiawei
     * @date 2023/8/31 5:19 下午
     **/
    List<AppQuestionListRespVO> getQuestionListByIds(List<Long> ids);

    /**
     * 批量上传用户做题记录
     *
     * @param reqVOList
     * @return java.lang.Boolean
     * @author chenjiawei
     * @date 2023/9/3 11:19 上午
     **/
    Boolean batchCreateMemberActionRecord(List<AppQuestionActionRecordReqVO> reqVOList);

    /**
     * 获取当前用户的所有做题记录
     *
     * @param reqVO
     * @return java.util.List<com.hsjk.szwj.module.train.controller.app.vo.question.AppQuestionActionRecordReqVO>
     * @author chenjiawei
     * @date 2023/11/1 12:38 AM
     **/
    List<AppQuestionActionRecordReqVO> getMemberActionRecord(AppMemberActionRecordReqVO reqVO);


    /**
     * 创建用户做试卷记录
     *
     * @param reqVO
     * @return boolean
     * @author chenjiawei
     * @date 2023/8/19 11:59 上午
     **/
    boolean createMemberPaperRecord(AppMemberPaperRecordReqVO reqVO);

    /**
     * 根据用户id获取最新序列的错题记录
     *
     * @param memberId
     * @return java.util.List<com.hsjk.szwj.module.member.dal.dataobject.user.MemberPaperErrorRecordDO>
     * @author chenjiawei
     * @date 2023/8/20 2:46 下午
     **/
    List<MemberPaperErrorRecordDO> listMaxSeqMemberPaperErrorRecordByMemberId(Long memberId);

    /**
     * 获取当前用户的题目id列表
     *
     * @param reqVO
     * @return java.util.List<java.lang.Long>
     * @author chenjiawei
     * @date 2023/9/15 11:44 AM
     **/
    List<Long> getCurrentMemberQuestionIdList(AppMemberPaperListReqVO reqVO);

    AppMemberPaperRecordRespVO getPaperRecordByPaperId(Long paperId);

    /**
     * 获取当前用户错题Id集合
     *
     * @param reqVO
     * @return java.util.List<java.lang.Long>
     * @author chenjiawei
     * @date 2023/10/26 12:59 AM
     **/
    List<Long> getCurrentMemberErrorQuestionIdList(AppMemberErrorIdsReqVO reqVO);

    /**
     * 获取当前用户收藏题目ID集合
     *
     * @param reqVO
     * @return java.util.List<java.lang.Long>
     * @author chenjiawei
     * @date 2023/10/26 1:16 AM
     **/
    List<Long> getCurrentMemberCollectQuestionIdList(AppMemberCollectIdsReqVO reqVO);

    List<AppQuestionChapterListRespVO> getChapterListByIds(List<Long> ids);

    List<AppQuestionChapterListRespVO> getChapterListByQuestionIds(List<Long> ids);

    /**
     *  获取当前用户模考汇总信息
     *
     * @author chenjiawei
     * @date 2023/11/9 5:22 PM
     * @param reqVO
     * @return com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperSummaryRespVO
     **/
    AppMemberPaperSummaryRespVO getMemberPaperSummary(AppMemberPaperSummaryReqVO reqVO);

    /**
     * 分页查询当前用户模考信息
     *
     * @param reqVO
     * @return com.hsjk.szwj.framework.common.pojo.PageResult<com.hsjk.szwj.module.train.controller.app.vo.question.AppMemberPaperRecordPageRespVO>
     * @author chenjiawei
     * @date 2023/10/28 12:39 AM
     **/
    PageResult<AppMemberPaperRecordPageRespVO> getMemberPaperRecordPage(AppMemberPaperRecordPageReqVO reqVO);

    /**
     * 获取当前用户课程下错题章节列表信息
     *
     * @param courseId
     * @return java.util.List<com.hsjk.szwj.module.train.controller.app.vo.chapter.AppMemberErrorQuestionChapterRespVO>
     * @author chenjiawei
     * @date 2023/11/3 4:44 PM
     **/
    List<AppMemberErrorQuestionChapterRespVO> getMemberErrorQuestionChapterList(Long courseId);

    /**
     * 获取当前用户某个课程下的收藏题目id列表
     *
     * @param courseId
     * @return java.util.List<java.lang.Long>
     * @author chenjiawei
     * @date 2023/11/6 11:22 AM
     **/
    List<Long> getCurrentMemberCollectQuestionIdList(Long courseId);

}
